package lanqiao.真题.第13届决赛JavaB组;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

/**
 * @author 挚爱之夕
 * @version 1.0
 * @implSpec
 * 【问题描述】
 * 小蓝有一个长度为N的数组，初始时从左到右依次是1,2,3，..N。
 * 之后小蓝对这个数组进行了M次操作，每次操作可能是以下2种之一：
 * 1.左移x,即把x移动到最左边。
 * 2.右移x,即把x移动到最右边。
 * 请你回答经过M次操作之后，数组从左到右每个数是多少？
 * 【输入格式】
 * 第一行包含2个整数，N和M。
 * 以下M行每行一个操作，其中“L x”表示左移x,“R x“表示右移x。
 * 【输出格式】
 * 输出N个数，代表操作后的数组。

 * 【样例输入】
 * 5	3
 * L	3
 * L    2
 * R    1

 * 【样例输出】
 * 2	3	4	5	1

 * [1,2,3,4,5]→[3,1,2,4,5]→[2,3,1,4,5]→[2,3,4,5,1]
 * @since 2023-05-26 17:11
 */
public class C_左移右移 {
}

class MainC{
    public static void main(String[] args) throws IOException {
        IR sc = new IR();
        int n = sc.nextInt(), m = sc.nextInt();
        //记录是否输出
        boolean[] vis = new boolean[n + 1];
        //一个数可能多次左移右移，记录最后操作 未访问过-0 左移-1 右移-2
        int[] status = new int[n + 1];
        List<Integer> lList = new ArrayList<>();
        List<Integer> rList = new ArrayList<>();
        String dir;
        int num;
        for(int i = 0; i < m; i++){
            dir = sc.next();
            num = sc.nextInt();
            if(dir.equals("L")){
                lList.add(num);
                status[num] = 1;
            }else{
                rList.add(num);
                status[num] = 2;
            }
        }
        //左移的:最后左移的在前面 倒序
        for(int i = lList.size() - 1; i >= 0; i--){
            //没有使用过且最后操作是左移
            if(!vis[lList.get(i)] && status[lList.get(i)] == 1){
                vis[lList.get(i)] = true;
                System.out.print(lList.get(i) + " ");
            }
        }

        //未操作的数顺序不变
        for(int i = 1; i <= n; i++){
            if(status[i] == 0){
                System.out.print(i + " ");
            }
        }

        //右移的:先右移的在前面 正序
        //一个数可能多次右移: map 去重, 最后一次右移有效， i 越小这个数越先右移
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < rList.size(); i++){
            if(status[rList.get(i)] == 2){
                map.put(rList.get(i), i);
            }
        }
        List<Integer> sorted = new ArrayList<>(map.values());
        Collections.sort(sorted);
        for(int index : sorted){
            System.out.print(rList.get(index) + " ");
        }
    }
    static class IR{
        private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        private StringTokenizer tokenizer = new StringTokenizer("");
        public String next() throws IOException {
            if(!tokenizer.hasMoreTokens()){
                tokenizer = new StringTokenizer(reader.readLine());
            }
            return tokenizer.nextToken();
        }

        public int nextInt() throws IOException {
            return Integer.parseInt(next());
        }
    }
}
